package com.example.lcpractice.heading_offer;

/**
 * [剑指 Offer 65]不用加减乘除做加法.java
 * 写一个函数，求两个整数之和，要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
 * <p>
 * 示例:
 * <p>
 * 输入: a = 1, b = 1
 * 输出: 2
 */
public class q65 {
    public static void main(String[] args) {
        System.out.println(add(111,899));
    }

    public static int add(int a, int b) {
      /*  *//*
        a- 2:   (0010)
        b- 3:   (0011)
        a&b:     0010
        a&b<<1:  0100   刚好各个位置进位
         *//*
        int carry=(a&b)<<1;
        *//*
        a^b:     0001   非进位为1的位置
         *//*
        int num1 = (a ^ b);
        *//*
        '|':     0101
         *//*
        return (carry|num1);*/
        if (a == 0 || b == 0)
            return a ^ b;
        return add(a ^ b, (a & b) << 1);
    }
}
